# 设置项目所需的最低 CMake 版本
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

# 定义项目名称和使用的语言为 C++
project(recipe-12-03 LANGUAGES CXX)

# 添加一个可执行目标，名称为 "hello-world"，源文件是 "hello-world.cpp"
add_executable(hello-world helloWorld.cpp)

# 使用 target_compile_definitions 为 hello-world 目标添加编译定义。
# CMAKE_CXX_COMPILER_ID 是 CMake 内置变量，存储 C++ 编译器的标识符字符串。
# 我们定义 COMPILER_NAME 宏，其值为 CMAKE_CXX_COMPILER_ID 的内容。
# 注意字符串中的引号和转义，以确保在 C++ 代码中它是一个有效的字符串字面量。
target_compile_definitions(hello-world
  PUBLIC "COMPILER_NAME=\"${CMAKE_CXX_COMPILER_ID}\""
)

# 根据 C++ 编译器的标识符，添加特定的编译器宏定义。
# CMAKE_CXX_COMPILER_ID 的值通常是编译器的供应商名称，如 "GNU", "Intel", "PGI", "XL" 等。
# 使用 MATCHES 操作符进行模式匹配。
if(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  # 如果编译器 ID 包含 "Intel"，则定义 IS_INTEL_CXX_COMPILER 宏。
  target_compile_definitions(hello-world PUBLIC "IS_INTEL_CXX_COMPILER")
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  # 如果编译器 ID 包含 "GNU"，则定义 IS_GNU_CXX_COMPILER 宏。
  target_compile_definitions(hello-world PUBLIC "IS_GNU_CXX_COMPILER")
elseif(CMAKE_CXX_COMPILER_ID MATCHES "PGI")
  # 如果编译器 ID 包含 "PGI"，则定义 IS_PGI_CXX_COMPILER 宏。
  target_compile_definitions(hello-world PUBLIC "IS_PGI_CXX_COMPILER")
elseif(CMAKE_CXX_COMPILER_ID MATCHES "XL")
  # 如果编译器 ID 包含 "XL"，则定义 IS_XL_CXX_COMPILER 宏。
  target_compile_definitions(hello-world PUBLIC "IS_XL_CXX_COMPILER")
# 可以根据需要添加更多 elseif 分支来支持其他编译器
# else()
  # 对于未知编译器，可以不添加任何特定的 IS_... 宏，让 C++ 代码中的 #else 分支生效。
endif()